package com.yssoft.controller.app.purchase;

import com.yssoft.entity.core.TDdDetail;
import com.yssoft.entity.purchase.TDemandInfo;
import com.yssoft.service.purchase.DemandInfoService;
import com.yssoft.utils.AppUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import java.util.List;
import java.util.Map;

/**
 * @类名称: DemandInfoController
 * @类描述: 申请单管理
 * @作者: 洪丰
 * @创建时间:2018年5月2日 上午11:27:05
 */
@CrossOrigin//解决跨域session问题
@Controller
@RequestMapping("/app/demandInfo")
public class DemandInfoController {
    
    @Resource
    private DemandInfoService demandInfoService;
    
    
    
    /**
     * @方法名称: getPurchaseRequestList
     * @功能描述: 获取申请单列表
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午2:13:38
     * @param page 当前页数
     * @param limit 每页条数
     * @param companyId 企业id
     * @param requestDate 申请时间
     * @param requestState 申请状态
     * @return Object
     */
    @RequestMapping(value = "getPurchaseRequestList",method = RequestMethod.GET)
    @ResponseBody
    public Object getPurchaseRequestList(int page, int limit, Integer companyId, String requestDate, String requestState) {
        if (null == companyId) {
            return AppUtil.returnMapJson("0", "查询失败，请传递企业id", null);
        } 
        try {
            List<TDemandInfo> purchaseInfo = demandInfoService.findPage(page, limit, companyId, requestDate, requestState);
            return AppUtil.returnListObjectJson("1", "查询成功!", purchaseInfo);
        } catch (NumberFormatException | IllegalAccessException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "查询失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: getPurchaseRequestDetailList
     * @功能描述: 根据申请单获取采购详细列表
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午2:18:07
     * @param infoId 申请单id
     * @return Object
     */
    @RequestMapping(value = "getPurchaseRequestDetailList",method = RequestMethod.GET)
    @ResponseBody
    public Object getPurchaseRequestDetailList(Integer id) {
        if (null == id) {
            return AppUtil.returnMapJson("0", "查询失败，请传递申请单id", null);
        } 
        try {
            Map<String, Object> purchaseDetailList = demandInfoService.findOne(id);
            return AppUtil.returnMapJson("1", "查询成功!", purchaseDetailList);
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "查询失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: deletePurchaseRequest
     * @功能描述: 删除采购单以及详细
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午2:37:48
     * @param infoId
     * @return Object
     */
    @RequestMapping(value = "deletePurchaseRequest",method = RequestMethod.GET)
    @ResponseBody
    public Object deletePurchaseRequest(Integer infoId) {
        if (null == infoId) {
            return AppUtil.returnMapJson("0", "删除失败，请传递申请单id", null);
        } 
        try {
            demandInfoService.deleteOne(infoId);
            return AppUtil.returnListJson("1", "删除成功!", null);
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "删除失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: getGoodsClassify
     * @功能描述: 获取商品类别
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午4:15:46
     * @param companyId 企业id
     * @param classifyId 父类id
     * @return Object
     */
    @RequestMapping(value = "getGoodsClassify",method = RequestMethod.GET)
    @ResponseBody
    public Object getGoodsClassify(Integer companyId, Integer classifyId) {
        if (null == companyId) {
            return AppUtil.returnMapJson("0", "查询失败，请传递企业id", null);
        }
        if (null == classifyId) {
            return AppUtil.returnMapJson("0", "查询失败，请传递父类别id", null);
        }
        try {
        	List<TDdDetail> classifyList = demandInfoService.findChildrenMaterialType(classifyId, companyId);
            return AppUtil.returnListObjectJson("1", "查询成功!", classifyList);
        } catch (NumberFormatException | IllegalAccessException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "查询失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: getPersonGoodsClassify
     * @功能描述: 获取商品父类
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午4:17:13
     * @return Object
     */
    @RequestMapping(value = "getPersonGoodsClassify",method = RequestMethod.GET)
    @ResponseBody
    public Object getPersonGoodsClassify() {
        try {
        	List<Map<String, Object>> classifyList = demandInfoService.findMaterialType();
            return AppUtil.returnListJson("1", "查询成功!", classifyList);
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "查询失败!"+e.getMessage(), null);
        }
    }
   
    /**
     * @方法名称: getGoodsListByClassId
     * @功能描述: 根据类型获取物料
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午4:41:06
     * @param page
     * @param limit
     * @param companyId
     * @param classifyId
     * @return Object
     */
    @RequestMapping(value = "getGoodsListByClassId",method = RequestMethod.GET)
    @ResponseBody
    public Object getGoodsListByClassId(int page, int limit, Integer companyId, String classifyId, String materialName) {
        if (null == companyId) {
            return AppUtil.returnMapJson("0", "查询失败，请传递企业id", null);
        } 
        if (null == classifyId) {
            return AppUtil.returnMapJson("0", "查询失败，请传递种类id", null);
        } 
        try {
        	List<Map<String, Object>> materialList = demandInfoService.findMaterialByType(page, limit, companyId, classifyId, materialName);
            return AppUtil.returnListJson("1", "查询成功!", materialList);
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "查询失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: revokePurchaseRequest
     * @功能描述: 撤回采购申请
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午5:00:42
     * @param purchaseId 采购申请单id
     * @return Object
     */
    @RequestMapping(value = "revokePurchaseRequest",method = RequestMethod.GET)
    @ResponseBody
    public Object revokePurchaseRequest(Integer purchaseId) {
    	if (null == purchaseId) {
             return AppUtil.returnMapJson("0", "撤回失败，请传递申请单id", null);
        } 
        try {
        	int result = demandInfoService.updateStat(purchaseId,"1");
        	if(result > 0){
        		return AppUtil.returnMapJson("1", "撤回成功!", null);
        	}else{
        		return AppUtil.returnMapJson("1", "撤回失败，申请单不存在!", null);
        	}
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "撤回失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: savePurchaseRequest
     * @功能描述: 保存采购申请及其明细
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午6:46:01
     * @param userId
     * @return Object
     */
    @RequestMapping(value = "savePurchaseRequest",method = RequestMethod.POST)
    @ResponseBody
    public Object savePurchaseRequest(HttpServletRequest request,TDemandInfo entity) {
        try {
        	demandInfoService.save(request, entity);
        	return AppUtil.returnMapJson("1", "保存成功!", null);
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "保存失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: submitPurchaseRequest
     * @功能描述: 提交采购申请
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午6:58:01
     * @param purchaseId 采购申请id
     * @return Object
     */
    @RequestMapping(value = "submitPurchaseRequest",method = RequestMethod.GET)
    @ResponseBody
    public Object submitPurchaseRequest(Integer purchaseId) {
    	if (null == purchaseId) {
             return AppUtil.returnMapJson("0", "提交失败，请传递申请单id", null);
        } 
        try {
        	int result = demandInfoService.updateStat(purchaseId,"2");
        	if(result > 0){
        		return AppUtil.returnMapJson("1", "提交成功!", null);
        	}else{
        		return AppUtil.returnMapJson("1", "提交失败，申请单不存在!", null);
        	}
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "提交失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: getOrdersByDemandDId
     * @功能描述: 查看申请详情的采购状态
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午8:26:04
     * @param purchaseRequestDetailId 申请单详情id
     * @return Object
     */
    @RequestMapping(value = "getOrdersByDemandDId",method = RequestMethod.GET)
    @ResponseBody
    public Object getOrdersByDemandDId(Integer purchaseRequestDetailId) {
    	if (null == purchaseRequestDetailId) {
             return AppUtil.returnMapJson("0", "查询失败，请传递申请单明细id", null);
        } 
        try {
        	Map<String, Object> resultMap = demandInfoService.findPurchaseDetail(purchaseRequestDetailId);
        	return AppUtil.returnMapJson("1", "查询成功!", resultMap);
        	
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "查询失败!"+e.getMessage(), null);
        }
    }
    
    /**
     * @方法名称: getRecipientByPurchaseDId
     * @功能描述: 查看申请详情的收货记录
     * @作者: 洪丰
     * @创建时间:2018年5月2日 下午8:31:19
     * @param purchaseRequestDetailId 采购明细id
     * @return Object
     */
    @RequestMapping(value = "getRecipientByPurchaseDId",method = RequestMethod.GET)
    @ResponseBody
    public Object getRecipientByPurchaseDId(Integer purchaseRequestDetailId) {
    	if (null == purchaseRequestDetailId) {
             return AppUtil.returnMapJson("0", "查询失败，请传递申请单明细id", null);
        } 
        try {
        	Map<String, Object> resultMap = demandInfoService.findRecipientDetail(purchaseRequestDetailId);
        	return AppUtil.returnMapJson("1", "查询成功!", resultMap);
        	
        } catch (NumberFormatException e) {
        	e.printStackTrace();
            return AppUtil.returnMapJson("0", "查询失败!"+e.getMessage(), null);
        }
    }
}
